#ifndef __SLIST_H__
#define __SLIST_H__

#define my_scanf(op, format, ...) do{   \
    int ret = 0;                        \
    ret = scanf(format, __VA_ARGS__);   \
    while ('\n' != getchar())           \
        /*do nothing*/;                 \
    if (ret < 0)                        \
        goto op;                        \
} while (0)                             \

typedef void(*tp)(void *);

// 定义节点类型
typedef struct _node_t
{
    // 数据域
    void *data;

    // 指针域
    struct _node_t *next;
}node_t;

// 链表头信息结构体
typedef struct _slist_t
{
    node_t *p;      // 指向链表第一个节点
    int tsize;      // 类型大小
    int count;      // 节点数量
    // 自定义销毁函数
}slist_t;

slist_t *slist_create(int size);                // 创建链表头信息结构体
int slist_append(slist_t *s, int *num);         // 链表尾部插入
int slist_traverse(slist_t *s, tp my_printf);   // 链表的遍历
int slist_prepend(slist_t *s, void *num);       // 链表头部插入


#endif/*__SLIST_H__*/